package com.hunhjy.wx.wxsdk.api;

import com.hunhjy.core.kit.PropKit;
import com.hunhjy.wx.wxsdk.WxAccount;
import com.hunhjy.wx.wxsdk.cache.DefaultAccessTokenCache;
import com.hunhjy.wx.wxsdk.cache.IAccessTokenCache;

/**
 * 将 ApiConfig 绑定到 ThreadLocal 的工具类，以方便在当前线程的各个地方获取 ApiConfig 对象： 1：如果控制器继承自
 * MsgController 该过程是自动的，详细可查看 MsgInterceptor 与之的配合 2：如果控制器继承自 ApiController
 * 该过程是自动的，详细可查看 ApiInterceptor 与之的配合 3：如果控制器没有继承自
 * MsgController、ApiController，则需要先手动调用
 * ApiConfigKit.setThreadLocalApiConfig(ApiConfig) 来绑定 apiConfig 到线程之上
 */
public class ApiConfigKit {

	static IAccessTokenCache accessTokenCache = new DefaultAccessTokenCache();

	// 开发模式将输出消息交互 xml 到控制台
	private static boolean devMode = false;

	/**
	 * 如果要支持多公众账号，只需要在此返回各个公众号对应的 ApiConfig 对象即可 可以通过在请求 url 中挂参数来动态从数据库中获取
	 * ApiConfig 属性值
	 */
	public static WxAccount getWxAccount() {
		WxAccount wxAccount = accessTokenCache.get("wxAccount");
		if (wxAccount == null) {
			wxAccount = new WxAccount();
			// 配置微信 API 相关常量
			wxAccount.setToken(PropKit.get("wechart.token"));
			wxAccount.setAppId(PropKit.get("wechart.appId"));
			wxAccount.setAppSecret(PropKit.get("wechart.appsecret"));
			wxAccount.setEncryptMsg(PropKit.getBoolean("wechart.encryptMsg"));
			wxAccount.setEncodingAESKey(PropKit.get("wechart.encodingAESKey"));
		}

		return wxAccount;
	}

	public static void setAccessTokenCache(IAccessTokenCache accessTokenCache) {
		ApiConfigKit.accessTokenCache = accessTokenCache;
	}

	public static IAccessTokenCache getAccessTokenCache() {
		return ApiConfigKit.accessTokenCache;
	}

	public static void setDevMode(boolean devMode) {
		ApiConfigKit.devMode = devMode;
	}

	public static boolean isDevMode() {
		return devMode;
	}
}